﻿/*
SINACOR - BMF&Bovespa
Arquivo: IntegracaoContabil.cs
Criado em: 28-mai-2010 10:34:38
Arquiteto Responsável: p-wgeneroso
*/
using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Service.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation;


namespace Sinacor.Servico.Bovespa.Contabil.BusinessLogic 
{
	public class IntegracaoContabil : BaseBusinessLogic 
	{
		#region Atributos

		private int _erroObjetoNulo = 109727;
        private ResourceAccess.IntegracaoContabil raIntegracaoContabil;

		#endregion

		#region Propriedades

		public int ErroObjetoNulo
		{
			get { return _erroObjetoNulo; }
			set { _erroObjetoNulo = value; }
		}

		#endregion

        #region Construtor

        /// <summary>
        /// Constutor padrão
        /// </summary>
        public IntegracaoContabil()
        {
            raIntegracaoContabil = new Sinacor.Servico.Bovespa.Contabil.ResourceAccess.IntegracaoContabil();
        }

        #endregion

        #region Métodos
        
        /// <summary>
        /// Gera integração contábil
        /// </summary>
        /// <param name="entity"></param>
		public void GerarIntegracaoContabil(BusinessEntity.Parameter.FiltroIntegracaoContabil entity)
		{
            BusinessEntity.Resultado resultado = null;
            
            //Validação de objeto nulo
            if (entity == null)
                new BusinessException(this._erroObjetoNulo);

            //Validação de RuleSet
            SinacorValidation validation = new SinacorValidation();
            validation.Validate<BusinessEntity.Parameter.FiltroIntegracaoContabil>(entity);

            //Gera integração contábil
            resultado = raIntegracaoContabil.GerarIntegracaoContabil(entity);

            //Trata exceção
            if (!resultado.Sucesso)
                this.TratarExcecoes(resultado);
		}

		/// <summary>
		/// Trata as exceções geradas na execução da abertura.
		/// </summary>
		/// <param name="entity"></param>
		private void TratarExcecoes(BusinessEntity.Resultado entity)
		{
            if (string.IsNullOrEmpty(entity.Argumentos))
                throw new BusinessException(entity.CodigoErro);
            else
            {
                List<Object> _params = ErrorMessage.ConvertXmlArgumentsToParameters(entity.Argumentos);

                if (_params != null)
                    throw new BusinessException(entity.CodigoErro, _params.ToArray());
                else
                    throw new BusinessException(entity.CodigoErro);
            }
		}
		#endregion
	}

}